import moment from "moment";
import { getDefaultUserInfo } from "./utils";
// 枚举植物类型
const plantTypeList = {
    1: '生产',
    2: '防御',
    3: '进攻',
    4: '辅助',
    5: '主动释放灰烬', // 灰烬植物在触发后会自我销毁
    6: '接触攻击型灰烬',
}

// 枚举植物技能类型
const plantSkillType = {
    every: '永续 每次攻击触发',
}

// 枚举植物技能
const plantSkillList = {
    ice: '减少目标的移动速度和攻击频率',
}

const plantInfoList = {
    sunflower: {
        id: 1,
        name: '向日葵',
        desc: '最基础的阳光生产植物，也是玩家最重要的阳光来源',
        price: 50, // 消耗阳光
        type: 1, // 植物类型
        sun: 2, // 阳光生产效率 仅生产植物
        maxHp: 100, // 最大生命值
        hp: 100, // 当前生命
        img: `SunFlower`,
        url: 'https://pic.imgdb.cn/item/66798819d9c307b7e9b3db31.png',
        isCanPlant: true, // 是否开放种植
        location: 1, // 位置 越大则越靠前
    },
    pea: {
        id: 2,
        name: '豌豆射手',
        desc: '最基础的防守植物',
        price: 100,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '发射了一颗豌豆，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `pea`,
        url: 'https://pic.imgdb.cn/item/667985b3d9c307b7e9ac5908.png',
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前
    },
    cherryBomb: {
        id: 3,
        name: '樱桃炸弹',
        desc: '它会把惹怒它的家伙全都送上天，向日葵如是说',
        price: 150,
        type: 3,
        atk: 800, // 攻击力
        atkActionText: '发生了爆炸，高温烧焦了',
        atkRange: 'front', // 攻击范围 前方
        range: 0, // 攻击范围为前方时 攻击距离 0即为同一位置
        isAoeDamage: true, // 是否为范围伤害 默认为false
        isAoeDamageRange: 1, // 范围伤害范围
        interval: 100, // 攻击间隔(毫秒)
        maxHp: 1000,
        hp: 1000,
        img: `cherryBomb`,
        url: 'https://pic.imgdb.cn/item/6679b994d9c307b7e924236e.png',
        skill: [
            {
                // 灰烬技能 在攻击后阵亡
                name: 'cherryBomb',
                nameStr: '爆炸',
                desc: '在僵尸靠近樱桃炸弹时，樱桃炸弹会对范围内僵尸造成大量伤害',
                level: 1,
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 100, // 位置 越大则越靠前
    },
    nut: {
        id: 4,
        name: '坚果',
        desc: '居家必备坚果墙',
        price: 50,
        type: 2,
        maxHp: 1000,
        hp: 1000,
        img: `nut`,
        url: 'https://pic.imgdb.cn/item/6679b989d9c307b7e92419f3.png',
        isCanPlant: true, // 是否开放种植
        location: 50, // 位置 越大则越靠前
    },
    icePea: {
        id: 5,
        name: '寒冰射手',
        desc: '它和火炬树桩关系非常好',
        price: 175,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '发射了一颗冰霜豌豆，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `icePea`,
        url: 'https://pic.imgdb.cn/item/6679b987d9c307b7e92417bc.png',
        skill: [
            {
                name: 'ice',
                slowSpeed: 1.2, // 僵尸移动花费的时间增加50% ice技能独有
                slowTime: 2000, // 减速时长
                nameStr: '冰霜',
                desc: '寒冰射手的会使敌人减速',
                level: 1,
                type: 'every', // every: 永续效果 cd: 存在冷却时间
                // cd: 0, // 技能存在冷却时间时传cd 和 当前技能冷却剩余时间
                // targetCd: 0,
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前
    },
    chomper: {
        id: 6,
        name: '大嘴花',
        desc: '大嘴花或许需要牙签，它从来没有消化不良的问题',
        price: 150,
        type: 3,
        atk: 1200, // 攻击力
        atkActionText: '一口吞下了',
        atkRange: 'front', // 攻击范围 前方
        range: 1, // 攻击范围为前方时 攻击距离
        interval: 20000, // 攻击间隔(毫秒)
        maxHp: 100,
        hp: 100,
        img: `chomper`,
        url: 'https://pic.imgdb.cn/item/6679b980d9c307b7e9240cd2.png',
        isCanPlant: true, // 是否开放种植
        location: 10, // 位置 越大则越靠前
    },
    potato: {
        id: 7,
        name: '土豆雷',
        price: 25,
        type: 6,
        atk: 500, // 攻击力
        maxHp: 999999,
        hp: 999999,
        img: `potato`,
        url: 'https://pic.imgdb.cn/item/6679b990d9c307b7e92420ce.png',
        notReady: true, 
        readyTime: 5, // 种下后到生效需要的时间 单位: 分钟
        isCanPlant: false, // 是否开放种植
        location: 60, // 位置 越大则越靠前
    },
    // 双发射手
    doublePea: {
        id: 8,
        name: '双发射手',
        desc: '双倍的价格，双倍的火力',
        price: 200,
        type: 3,
        atk: 20, // 攻击力
        atkActionText: '发射了两颗豌豆，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `doublePea`,
        url: 'https://pic.imgdb.cn/item/6679b98dd9c307b7e9241df6.png',
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前
    },
    // 小喷菇
    puffShroom: {
        id: 9,
        name: '小喷菇',
        desc: '你永远无法拒绝的免费的诱惑',
        price: 0,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '喷出了孢子，击中了',
        atkRange: 'front', // 攻击范围 前方
        range: 3, // 攻击范围为前方时 攻击距离
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 50,
        hp: 50,
        img: 'puffShroom',
        url: 'https://pic.imgdb.cn/item/6673a079d9c307b7e910e68a.gif',
        sleep: true, // 是否在白天休眠
        cd: 60, // 冷却时间 单位: 分钟
        isCanPlant: true, // 是否开放种植
        location: 40, // 位置 越大则越靠前
    },
    // 阳光菇(未成熟)
    smallSunShroom: {
        id: 10,
        name: '阳光菇',
        desc: '成长后拥有和向日葵一样的生产效率，但是白天会休眠',
        price: 0,
        type: 1,
        sun: 1, // 阳光生产效率 仅生产植物
        maxHp: 100, // 最大生命值
        hp: 100, // 当前生命
        img: `smallSunShroom`,
        url: 'https://pic.imgdb.cn/item/6673a079d9c307b7e910e62f.gif',
        sleep: true, // 是否在白天休眠
        isGrow: true, // 是否为成长型植物
        growRemainingTime: 24, // 距离成长完成时间 单位: 小时
        afterGrowPlantId: 11, // 成长后的植物id
        isCanPlant: true, // 是否开放种植
        location: 1, // 位置 越大则越靠前

    },
    // 阳光菇(已成熟)
    sunShroom: {
        id: 11,
        name: '阳光菇',
        desc: '拥有和向日葵一样的生产效率，但是白天会休眠',
        price: 0,
        type: 1,
        sun: 2, // 阳光生产效率 仅生产植物
        maxHp: 100, // 最大生命值
        hp: 100, // 当前生命
        img: `smallSunShroom`,
        url: 'https://pic.imgdb.cn/item/6673a079d9c307b7e910e62f.gif',
        sleep: true, // 是否在白天休眠
        isCanPlant: false, // 是否开放种植
        location: 1, // 位置 越大则越靠前

    },
    // 大喷菇
    bigPuffShroom: {
        id: 12,
        name: '大喷菇',
        price: 75,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '喷出了大量喷雾，击中了',
        atkRange: 'front', // 攻击范围 前方
        range: 4, // 攻击范围为前方时 攻击距离
        isAoeAtk: true, // 是否攻击范围内的所有人
        isPierce: true, // 是否为穿透攻击 无视敌人的防具
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: 'bigPuffShroom',
        url: '',
        sleep: true, // 是否在白天休眠
        isCanPlant: false, // 是否开放种植
        location: 20, // 位置 越大则越靠前

    },
    // 魅惑菇
    fumeShroom: {
        id: 13,
        name: '魅惑菇',
        price: 75,
        type: 2,
        maxHp: 1,
        hp: 1,
        img: 'fumeShroom',
        sleep: true, // 是否在白天休眠
        skill: [
            {
                name: 'fume',
                nameStr: '魅惑',
                desc: '魅惑菇的会魅惑敌人',
                level: 1,
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: false, // 是否开放种植
        location: 100, // 位置 越大则越靠前

    },
    // 胆小菇
    coneShroom: {
        id: 14,
        name: '胆小菇',
        price: 25,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '发射了孢子，击中了',
        atkRange: 'front', // 攻击范围 前方
        range: 4, // 攻击范围为前方时 攻击距离
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: 'coneShroom',
        sleep: true, // 是否在白天休眠
        skill: [
            {
                name: 'cone',
                nameStr: '胆小',
                desc: '前方一格存在僵尸时，胆小菇不会攻击',
                level: 1,
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: false, // 是否开放种植
        location: 20, // 位置 越大则越靠前

    },
    // 窝瓜
    squash: {
        id: 15,
        name: '窝瓜',
        desc: '窝瓜会碾碎靠近它的倒霉蛋',
        price: 50,
        type: 3,
        atk: 1000, // 攻击力
        atkActionText: '发现了目标，碾压了',
        atkRange: 'front', // 攻击范围 前方
        range: 1, // 攻击范围为前方时 攻击距离
        interval: 100, // 攻击间隔(毫秒)
        maxHp: 2000,
        hp: 2000,
        img: 'squash',
        url: 'https://pic.imgdb.cn/item/6673a07bd9c307b7e910e968.gif',
        skill: [
            {
                // 灰烬技能 在攻击后阵亡
                name: 'squash',
                nameStr: '碾压',
                desc: '在僵尸靠近窝瓜时，窝瓜会碾压僵尸',
                level: 1,
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 100, // 位置 越大则越靠前

    },
    // 三线射手
    triplePea: {
        id: 16,
        name: '三线射手',
        price: 325,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '发射了三颗豌豆，分别击中了',
        atkRange: 'tripleLine', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `triplePea`,
        isCanPlant: false, // 是否开放种植
        location: 2, // 位置 越大则越靠前

    },
    // 地刺
    groundThorn: {
        id: 17,
        name: '地刺',
        desc: '非常的扎嘴，僵尸们应该不会想去吃它',
        price: 100,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '刺中了',
        atkRange: 'front', // 攻击范围 前方
        range: 0, // 攻击范围为前方时 攻击距离
        isPierce: true, // 是否为穿透攻击
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 1,
        hp: 1,
        isNotAttack: true, // 不会被僵尸攻击
        img: 'groundThorn',
        url: 'https://pic.imgdb.cn/item/6673a052d9c307b7e910a58e.gif',
        isCanPlant: true, // 是否开放种植
        location: 200, // 位置 越大则越靠前

    },
    // 高坚果
    highNut: {
        id: 18,
        name: '高坚果',
        desc: '我变高了，也变墙了',
        price: 125,
        type: 2,
        maxHp: 2000,
        hp: 2000,
        img: `highNut`,
        url: 'https://pic.imgdb.cn/item/6673a058d9c307b7e910af5c.gif',
        isCanPlant: true, // 是否开放种植
        location: 100, // 位置 越大则越靠前

    },
    // 杨桃
    carambola: {
        id: 19,
        name: '杨桃',
        desc: '杨桃会周期性发射高频率星星子弹，至于有多少能打中，杨桃并没有考虑这些',
        price: 125,
        type: 3,
        atk: 5, // 攻击力
        atkActionText: '向四周发射了星星，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `carambola`,
        url: 'https://pic.imgdb.cn/item/6673a03ad9c307b7e9107e66.gif',
        isCanPlant: true, // 是否开放种植
        skill: [
            {
                name: 'star',
                nameStr: '星星',
                desc: '每攻击5次(一级技能)，第五次攻击连续发射五颗子弹，随机攻击场上任意僵尸',
                atk: 10, // 每颗子弹伤害
                needTimes: 4, // 每四次普通攻击后 触发一次技能
                level: 1,
                type: 'every', // 永续效果
            }
        ],
        location: 3, // 位置 越大则越靠前

    },
    // 卷心菜投手
    cabbage: {
        id: 20,
        name: '卷心菜投手',
        desc: '那是什么，白菜（？',
        price: 100,
        type: 3,
        atk: 20, // 攻击力
        hitRate: 0.5, // 攻击命中率
        atkActionText: '向前方投掷出卷心菜，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `cabbage`,
        url: 'https://pic.imgdb.cn/item/6673a003d9c307b7e9101fbe.gif',
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前

    },
    // 玉米投手
    maize: {
        id: 21,
        name: '玉米投手',
        desc: '玉米投手一直想成为黄油高手',
        price: 100,
        type: 3,
        atk: 5, // 攻击力
        atkActionText: '向前方投掷出玉米，击中了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `maize`,
        url: 'https://pic.imgdb.cn/item/6673a065d9c307b7e910c1f7.gif',
        skill: [
            {
                name: 'butter',
                nameStr: '黄油',
                desc: '每攻击10次(1级技能)，投掷出黄油，对僵尸造成中等伤害和长时间定身',
                level: 1,
                atk: 20, // 黄油伤害
                needTimes: 10, // 频率 每10次攻击投掷一次黄油
                duration: 4000, // 定身时长
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前

    },
    // 大蒜
    garlic: {
        id: 22,
        name: '大蒜',
        desc: '没有僵尸能抵挡这股味道',
        price: 50,
        type: 2,
        maxHp: 100,
        hp: 100,
        img: `garlic`,
        url: 'https://pic.imgdb.cn/item/6673a04ed9c307b7e910a04f.gif',
        skill: [
            {
                name: 'garlic',
                nameStr: '大蒜',
                desc: '被攻击后，使僵尸更换移动路线并减速',
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 100, // 位置 越大则越靠前

    },
    // 金盏花
    calendula: {
        id: 23,
        name: '金盏花',
        desc: '向日葵的远房亲戚',
        price: 50,
        type: 1, // 植物类型
        sun: 1, // 阳光生产效率 仅生产植物
        money: 1, // 生产金币
        moneyProbability: 0.05, // 生成阳光时 产出金币的概率
        maxHp: 100, // 最大生命值
        hp: 100, // 当前生命
        img: `calendula`,
        url: 'https://pic.imgdb.cn/item/6673a015d9c307b7e9103f99.gif',
        isCanPlant: true, // 是否开放种植
        location: 1, // 位置 越大则越靠前

    },
    // 西瓜投手
    watermelon: {
        id: 24,
        name: '西瓜投手',
        desc: '一切恐惧的根源是火力不足',
        price: 300,
        type: 3,
        atk: 40, // 攻击力
        atkActionText: '向前方投掷出西瓜，击中了',
        atkRange: 'line', // 攻击范围 整行
        isAoeDamage: true, // 是否为范围伤害 默认为false
        isAoeDamageRange: 1, // 范围伤害范围
        interval: 2000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `watermelon`,
        url: 'https://pic.imgdb.cn/item/6673a07bd9c307b7e910e9e8.gif',
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前

    },
    // 爆炸坚果
    boomNut: {
        id: 25,
        name: '爆炸坚果',
        desc: '坚果，红温了，随时都会爆炸',
        price: 50,
        type: 2,
        maxHp: 1000,
        hp: 1000,
        img: `nut`,
        skill: [
            {
                name: 'boomNut',
                nameStr: '爆炸坚果',
                desc: '被吃掉后会爆炸，对周围的僵尸造成大量伤害',
                level: 1,
                type: 'every', // 永续效果
                atk: 800, // 爆炸伤害
            }
        ],
        url: 'https://pic.imgdb.cn/item/6679b979d9c307b7e923fdfd.png',
        cd: 1440, // 冷却时间 单位: 分钟
        isCanPlant: true, // 是否开放种植
        location: 100, // 位置 越大则越靠前

    },
    // 仙人掌
    cactus: {
        id: 26,
        name: '仙人掌',
        desc: '给僵尸们来点痛痛吧',
        price: 125,
        type: 3,
        atk: 10, // 攻击力
        atkActionText: '向前方射出尖刺，穿透了',
        atkRange: 'line', // 攻击范围 整行
        interval: 1000, // 攻击间隔(毫秒) 仅进攻植物或炸弹
        maxHp: 100,
        hp: 100,
        img: `cactus`,
        url: 'https://pic.imgdb.cn/item/6673a012d9c307b7e9103896.gif',
        skill: [
            {
                name: 'cactus',
                nameStr: '尖刺',
                desc: '对受击的僵尸附加针刺效果，持续2秒(针刺: 受到任意攻击时,造成2点追加伤害)',
                level: 1,
                atk: 2, // 追加伤害
                duration: 2000, // 针刺效果持续时间
                type: 'every', // 永续效果
            }
        ],
        isCanPlant: true, // 是否开放种植
        location: 2, // 位置 越大则越靠前

    }
}

const plantOrderList = { // 植物信息
    'sunflower': ['向日葵', '太阳花', '葵葵', '葵'],
    'pea': ['豌豆射手', '豌豆'],
    'cherryBomb': ['樱桃炸弹', '樱桃'],
    'nut': ['坚果', '墙'],
    'icePea': ['寒冰射手', '冰豌豆', '寒冰', '冰射手'],
    'chomper': ['大嘴花', '大嘴', '食人花', '食人', '咀嚼者'],
    'potato': ['土豆雷', '土豆', '雷'],
    'doublePea': ['双发射手', '双发射', '双发', '双重射手'],
    'puffShroom': ['小喷菇', '小喷', '小菇', '喷菇'],
    'smallSunShroom': ['阳光菇', '阳菇'],
    'bigPuffShroom': ['大喷菇', '大喷', '大菇'],
    'fumeShroom': ['魅惑菇', '魅惑', '魅菇'],
    'coneShroom': ['胆小菇', '胆菇', '胆小'],
    'squash': ['窝瓜', '窝'],
    'triplePea': ['三发射手', '三线射手', '三发', '三线'],
    'groundThorn': ['地刺', '刺'],
    'highNut': ['高坚果', '高果', '大坚果', '大果', '高建国', '高'],
    'carambola': ['杨桃', '杨'],
    'cabbage': ['卷心菜投手', '投手', '卷心菜', '卷心', '卷'],
    'maize': ['玉米投手', '玉米', '玉米'],
    'garlic': ['大蒜', '蒜'],
    'calendula': ['金盏花', '金盏', '金'],
    'watermelon': ['西瓜投手', '西瓜', '瓜'],
    'boomNut': ['爆炸坚果', '炸坚果', '爆炸果', '爆果'],
    'cactus': ['仙人掌', '仙人', '仙'],
}

const userGrowPlantCallback = (plant = []) => {
    let isChanged = false
    plant = plant.map(item => {
        if (item.isGrow && item.growEndTime) { // 成长型植物
            let isGrowEnd = moment().isAfter(item.growEndTime)
            if (isGrowEnd) { // 成长完成
                item.isGrowEnd = true
                isChanged = true
            }
        }
        return item
    })
    if (plant.some(item => item.isGrowEnd)) {
        // 成长后的植物id
        let isGrowEndPlantId = plant.filter(j => j.isGrowEnd).map(j => j.afterGrowPlantId)
        // 剔除原本的植物
        plant = plant.filter(item => !item.isGrowEnd)
        // 加入新增的
        let addPlantList = isGrowEndPlantId.map(id => {
            return Object.values(plantInfoList).find(j => j.id === id)
        })
        plant = plant.concat(addPlantList)
    }
    return {
        plant,
        isChanged
    }
}


export {
    plantInfoList,
    plantOrderList,
    userGrowPlantCallback,
    plantTypeList,
}